#include <stdio.h>
#include <ctype.h>
#include <math.h>

//day 10.22 class 1

/*-------------------------------------------------------------------------------------------*/
//接受字符转大小写
// int main()
// {
//     int ch = 0;
//     while ((ch = getchar()) != EOF) //**end of file 文件结束标志 这样当你不想输入时可以 ctrl+z/c 结束循环 否则这个程序不会停止 此知识点多用于OJ***
//     {
//         printf("%c\n", ch + 32);
//         getchar(); //将上一次键盘接受的大写字母后多余的回车('\n') 给读取出来 不然会多余输出一个 \n + 32 = *
//     }
    
//     return 0 ;
// }


/*-------------------------------------------------------------------------------------------*/
//反向输出
// int main() 
// {
//     int n = 1234;
    
//     printf("%d", n % 10);
//     printf("%d", n / 10 % 10);
//     printf("%d", n / 10 / 10 % 10);
//     printf("%d", n / 10 / 10 / 10 % 10);
//     printf("%d\n", n / 10 / 10 / 10 / 10 % 10);

//     while (n)
//     {
//         printf("%d", n % 10);
//         n /= 10;

//     }
    
//     return 0;
// }

/*-------------------------------------------------------------------------------------------*/
//给定不同进制前缀
// int main()
// {
//     printf("%#o, %#X", 1234, 1234);
    
//     return 0;
// }



//day 10.23 class 2
/*-------------------------------------------------------------------------------------------*/
//关于printf返回值
// int main()
// {
    
//     //int a = printf("12345!");
//    //先打印里边的printf 再打印外边的printf(先打印\n 再打印返回值)
//     printf("\n%d",printf("12345!"));

//     //4321
//     printf("\n");
//     printf("%d",printf("%d",printf("%d",43)));

    
//     return 0;
// }



/*-------------------------------------------------------------------------------------------*/
//判断多组输入是否是字符
// #include <ctype.h>

// int main()
// {
    
//     int ch = 0;
//     //no fuuuuking this!!!!!!!!!
//     //一直循环的都是第一次输入的
//     ch = getchar();
//     while((ch) != EOF)

//     //like this
    // while((ch = getchar()) != EOF)  /*scanf("%d", &n) != EOF */
//     {
//         if((isalpha(ch)))
//         {
//             printf("YES\n");
//         }
//         else
//         {
//             printf("NO\n");
//         }
//         getchar();//扣除\n
//     }
    
//     return 0;
// }



/*-------------------------------------------------------------------------------------------*/
//截取年月
// int main()
// {
//     int year, month, day;
//     scanf("%4d %2d %2d", &year, &month, &day);
//     printf("%4d\n", year);
//     //printf("%2d\n", month);单纯%2d不会处输出02而是 2，因为scanf截取时认为02就是数值2，所以存的是2
//     //%02d    指的是至少显示两位，不够补0
//     printf("%02d\n", month);
//     printf("%02d\n", day);
   
//     return 0;
// }



//day 10.24 class 3
/*-------------------------------------------------------------------------------------------*/
//BMI指数
// int main()
// {
//     int w, h;
//     double bmi = 0.0;
//     scanf("%d %d", &w, &h);
    
//     bmi = w / ((h / 100.0) * (h / 100.0));
   
//    printf("%.2lf", bmi);
//     return 0;
// }


/*-------------------------------------------------------------------------------------------*/
//变种水仙花数
// int main()
// {
//     int i = 0;
    
//     //列出所有五位数
//     for(i = 10000; i < 99999; i++)
//     {
//         int j = 0;
//         int sum = 0;
//         for(j = 10; j <= 10000; j *= 10)
//         {
//             sum += (i / j) * (i % j);
            
//         }
//         if(sum == i)
//         {
//             printf("%d ", i);
//         }

//     }
//     return 0;
// }



/*-------------------------------------------------------------------------------------------*/
// //KIKI运算
// int main()
// {
//     int a, b;
//     int sum = 0;
//     scanf("%d %d", &a, &b);
//     sum = a + b;
//     sum = sum % 100;
//     printf("%d", sum);
//     return 0;
// }



//day 10.26 class 4
/*-------------------------------------------------------------------------------------------*/
//求平均成绩
//step 1
// int main()
// {
//     double a, b, c;
//     double sum = 0.0;
//     scanf("%lf %lf %lf", &a, &b, &c);
//     sum = a + b + c;

//     printf("%.2lf %.2lf", sum, sum / 3);

//     return 0;
// }

//step 2
// int main()
// {
//     double grade = 0.0;
//     double sum = 0.0;
//     for(int i = 0; i < 3; i++)
//     {
//         scanf("%lf", &grade);
//         sum += grade;
//     }

//     printf("%.2lf %.2lf", sum, sum / 3);

//     return 0;
// }

//step 3 you dian sha bi
// int main()
// {
//     double grade[3] = {0.0};
//     double sum = 0.0;
//     scanf("%lf %lf %lf", &grade[0], &grade[1], &grade[2]);
//     sum = grade[0] + grade[1] + grade[2];
//     printf("%.2lf %.2lf", sum, sum / 3);

//     return 0;
// }



/*-------------------------------------------------------------------------------------------*/
//kk喝酸奶
// #include <math.h>

// int main()
// {
//     double h, m, n;
//     double res = 0.0;
//     //OJ题 需要多组输入时
//     //if((scanf("%lf %lf %lf\n", &h, &m, &n) != EOF) && m <= n * h)
//     //****************************** */
//     while (scanf("%lf %lf %lf", &n, &h, &m) != EOF)
//     //也可以用 ~ 代替 != EOF
//     //while (~scanf("%lf %lf %lf", &n, &h, &m))
//     {
//         printf("m = %lf\n", m);
//         printf("h = %lf\n", h);
//         printf("喝了%lf瓶\n", ceil(m / h));
//         res =  n - ceil(m / h);
//         printf("%d\n", (int)res);   
//     }  

//      return 0;
// }






/*-------------------------------------------------------------------------------------------*/
//kk双11/12买衣服

// #include <math.h>

// int main()
// {
//     double price = 0.0;
//     int month,day;
//     int flag = 0;//是否有优惠卷

//     scanf("%lf %d %d %d", &price, &month, &day, &flag);

//     if(month == 11 && day == 11)
//     {
//         price = price * 0.7 - flag * 50;
//     }
//     else if(month == 12 && day == 12)
//     {
//         price = price * 0.8 - flag * 50;
//     }
    
//     if(price < 0)
//     {
//         printf("%.2lf", 0.0);
//     }
//     else
//     {
//         printf("%.2lf", price);
//     }

//      return 0;
// }




/*-------------------------------------------------------------------------------------------*/
//排序输出成绩
//*************************************************** */
//*************************************************** */
//*************************************************** */

// #include <math.h>
// #include <stdlib.h>

// int compare(const void *a, const void *b)
// {
//     //升序
//     //return (*(int*)a - *(int*)b);

//     //降序
//     return (*(int*)b - *(int*)a);
// }

// int main()
// {
//     int arr[40] = {0};
//     int n = 0;
//     scanf("%d", &n);
//     for(int i = 0; i < n; i++)
//     {
//         scanf("%d", &arr[i]);
//     }

//     //使用qsort函数进行排序
//     //arr:需排序数组名(指针)  n:数组中元素数量  sizeof(): 数组中元素大小
//     //compare： 函数名 需定义一个函数返回值 >0 <0 ==0 来决定排序顺序
//     qsort(arr, n, sizeof(int), compare);
//     for(int i = 0; i < n - 1; i++)
//     {
//         printf("%d ", arr[i]);
//     }

//      return 0;
// }








/*-------------------------------------------------------------------------------------------*/
//判断是否为元音


// #include <math.h>
// #include <string.h>

// int main()
// {
//     int ch = 0;
//     char arr[] = "AaEeIiOoUu";
//     //********************************************* */
//     //while (~(ch = getchar()))
//     //如果用 scanf 来接收而不是 getchar 的话
//     //可以通过 " %c" 或者 "%c\n" 两种方法来实现消除 \n 
//     //不用最后 getchar();//处理 \n
//     while (~scanf(" %c", &ch))
//     //虽然但是 "%c\n" 好像有bug 不太好用 还是 " %c" 好用
//     //while (~scanf("%c\n", &ch))
//     {
//         //判断在 strchr 数组里是否有 ch
//         //有的话返回所在数组的位置
//         //没有的话返回空指针
//         if(strchr(arr, ch))
//         {
//             printf("YES\n");
//         }
//         else
//         {
//             printf("NO\n");
//         }

//         //使用 while (~scanf(" %c", &ch)) 时 就不用下面来消除 \n 了
//         //getchar();//处理 \n
//     }
    

    

//     return 0;
// }







/*-------------------------------------------------------------------------------------------*/
//打印三角形


// #include <math.h>
// #include <string.h>

// int main()
// {
//     int n = 0;
//     scanf("%d", &n);

//     for(int i = 0; i < n; i++)
//     {
//         for (int k = 0; k < i + 1; k++)
//         {
//             printf("* ");
//         }
        
//         printf("\n");
//     }
//     return 0;
// }






/*-------------------------------------------------------------------------------------------*/
//打印左凹形


// #include <math.h>
// #include <string.h>

// int main()
// {
//     int n = 0;
//     scanf("%d", &n);

//     //up
//     for(int i = 0; i < n; i++)
//     {
//         for (int k = 0; k < n - i + 1; k++)
//         {
//             printf("*-");
//         }
//         for (int k = 0; k < i; k++)
//         {
//             printf("-");
//         }
//         printf("\n");
//     }

//     //down
//     for(int i = 0; i < n + 1; i++)
//     {
//         for (int k = 0; k < i + 1; k++)
//         {
//             printf("*-");
//         }
//         for (int k = 0; k < n - i; k++)
//         {
//             printf("-");
//         }
//         printf("\n");
//     }
//     return 0;
// }




/*-------------------------------------------------------------------------------------------*/
//打印箭形


// #include <math.h>
// #include <string.h>

// int main()
// {
//     int n = 0;
//     scanf("%d", &n);

//     //up
//     for(int i = 0; i < n; i++)
//     {
//         for (int j = 0; j < n - i; j++)
//         {
//             printf("--");
//         }
//         for (int j = 0; j < i + 1; j++)
//         {
//             printf("*");
//         }   
//         printf("\n");
//     }

//     //down
//     for(int i = 0; i < n + 1; i++)
//     {
//         for (int j = 0; j < i; j++)
//         {
//             printf("--");
//         }
//         for (int j = 0; j < n - i + 1; j++)
//         {
//             printf("*");
//         }   
//         printf("\n");
//     }
//     return 0;
// }




/*-------------------------------------------------------------------------------------------*/
//打印斜线


// #include <math.h>
// #include <string.h>

// int main()
// {
//     int n = 0;
//     scanf("%d", &n);

//     for(int i = 0; i < n; i++)
//     {
//         for (int j = 0; j < n; j++)
//         {
//             // if (i == j)
//             if (i + j == n -1)
//                 printf("*");
//             else
//                 printf("-");
//         }

//         printf("\n");
//     }


//     return 0;
// }





/*-------------------------------------------------------------------------------------------*/
//打印 X


// #include <math.h>
// #include <string.h>

// int main()
// {
//     int n = 0;
//     scanf("%d", &n);

//     for(int i = 0; i < n; i++)
//     {
//         for (int j = 0; j < n; j++)
//         {
//             // if (i == j)
//             if (i + j == n -1 || i == j)
//                 printf("*");
//             else
//                 printf("-");
//         }

//         printf("\n");
//     }


//     return 0;
// }




/*-------------------------------------------------------------------------------------------*/
//打印空心正方形


// #include <math.h>
// #include <string.h>

// int main()
// {
//     int n = 0;
//     scanf("%d", &n);

//     for(int i = 0; i < n; i++)
//     {
//         for (int j = 0; j < n; j++)
//         {
//             if ((i > 0 && i < n - 1) && (j > 0 && j < n - 1))
//             {
//                 printf("  ");
//             }
//             else
//                 printf("* ");
//         }

//         printf("\n");
//     }


//     return 0;
// }




// /*-------------------------------------------------------------------------------------------*/
// //打印空心三角形


// #include <math.h>
// #include <string.h>

// int main()
// {
//     int n = 0;
//     scanf("%d", &n);

//     for(int i = 0; i < n; i++)
//     {
//         for (int j = 0; j < i + 1; j++)
//         {
//             //挖空心 if
//             if ((i > 1 && i < n - 1) && (j > 0 && j < i))
//             {
//                 printf("  ");
//             }
//             else
//             {
//                  printf("* ");
//             }

//             //填边缘空心 if
//             // if (i == n - 1 || j == 0 || i == j)
//             // {
//             //     printf("* ");
//             // }
//             // else
//             // {
//             //      printf("  ");
//             // }
               
//         }
//         printf("\n");
//     }


//     return 0;
// }



/*-------------------------------------------------------------------------------------------*/
//插入数据使数组依旧顺序排序

// #include <math.h>

// int main()
// {
//     int n = 0;
//     scanf("%d", &n);
//     int arr[51] = {0};

//     for (int i = 0; i < n; i++)
//     {
//         scanf("%d", &arr[i]);
//     }

//     //需要排序的数
//     int m = 0;
//     scanf("%d", &m);
   
//    //倒序
//     for (int i = n - 1; i >= 0; i--)
//     {
//         //正常情况 
//         if (arr[i] > m)
//         {
//             arr[i + 1] = arr[i];
//         }

//         //找到插入点
//         else
//         {
//             arr[i + 1] = m;
//             break;
//         }
//     }
     

//     //边缘值特殊判断 (最小值是最左边)
//     if (arr[0] > m)
//     {
//         arr[0] = m;
//     }
    
//     for (int i = 0; i < n + 1; i++)
//     {
//         printf("%d ", arr[i]);
//     }

//     return 0;
// }







/*-------------------------------------------------------------------------------------------*/
//判断数列是否有序(顺序 降序都行)

// #include <math.h>

// int main()
// {
//     int n = 0;
//     scanf("%d", &n);
//     int arr[n + 1];

//     //升序
//     int flag0 = 0;
//     //降序
//     int flag1 = 0;

//     for (int i = 0; i < n; i++)
//     {
//         scanf("%d", &arr[i]);

//         if (i > 0)
//         {
            
//             if (arr[i -1] < arr[i])
//             {
//                 flag0 = 1;

//             }
//             else if (arr[i -1] > arr[i])
//             {
//                 flag1 = 1;

//             }
            
//         }

//     }
//     if (flag0 != flag1)
//     {
//         printf("yes");
//     }
//     else
//     {
//         printf("no");
//     }

//     return 0;
// }





/*-------------------------------------------------------------------------------------------*/
//删除指定数字

// #include <math.h>

// int main()
// {
//     int n = 0;
//     scanf("%d", &n);
//     int arr[51];

//     for (int i = 0; i < n; i++)
//     {
//         scanf("%d", &arr[i]);
//     }

//     int m = 0;
//     scanf("%d", &m);

//     int j = 0;
//     for (int i = 0; i < n; i++)
//     {
//         if (arr[i] != m)
//         {
//             arr[j++] = arr[i];
//         }

//     }

//     for (int i = 0; i < j; i++)
//     {
//         printf("%d ", arr[i]);
//     }

//     return 0;
// }







/*-------------------------------------------------------------------------------------------*/
//去重
// #include <math.h>

// int main()
// {
//     int n = 0;
//     scanf("%d", &n);
//     int arr[51];
    

//     //存值
//     for (int i = 0; i < n; i++)
//     {
//         scanf("%d", &arr[i]);
//     }

//     //操作
//     for (int i = 0; i < n; i++)
//     {
//         for (int j = i + 1; j < n; j++)
//         {
//             if (arr[i] == arr[j])
//             {
//                 //去重(将后序元素全部向左移一格)
//                 for (int k = j; k < n - 1; k++)
//                 {
//                     arr[k] = arr[k + 1];
//                 }
//                 n--;
//                 j--;//防止连续出现三个相同元素 只去重一次
//             }

//         }

//     }

//     //打印
//     for (int i = 0; i < n; i++)
//     {
//         printf("%d ", arr[i]);
//     }

//     return 0;
// }









/*-------------------------------------------------------------------------------------------*/
//输入两组升序 合并为一组升序
// #include <math.h>

// int main()
// {
//     int n, m;
//     scanf("%d %d", &n, &m);
//     int arr0[51];
//     int arr1[51];
//     int arr2[102];
    

//     //存值
//     for (int i = 0; i < n; i++)
//     {
//         scanf("%d", &arr0[i]);
//     }

//     for (int i = 0; i < m; i++)
//     {
//         scanf("%d", &arr1[i]);
//     }

//     //操作
//     int i = 0, j = 0, k = 0;
//     //当两数组都有剩余元素
//     while (i < n && j < m)
//     {
//         if (arr0[i] < arr1[j])
//         {
//             arr2[k++] = arr0[i++];
//         }
//         else
//         {
//             arr2[k++] = arr1[j++];
//         }
//     }

//     //arr1先排完了 那就把arr0的剩下数组接上
//     while (i < n)
//     {
//         arr2[k++] = arr0[i++];
//     }

//     //arr0先排完了 那就把arr1的剩下数组接上
//     while (j < n)
//     {
//         arr2[k++] = arr1[j++];
//     }

//     //打印
//     for (int k = 0; k < n + m; k++)
//     {
//         printf("%d ", arr2[k]);
//     }

//     return 0;
// }







/*-------------------------------------------------------------------------------------------*/
//判断三子棋输赢
// #include <math.h>

// int main()
// {
//     char chess[3][3] = {0};

//     for (int i = 0; i < 3; i++)
//     {
//         for (int j = 0; j < 3; j++)
//         {
//             scanf(" %c", &chess[i][j]);
//         }
//     }

//     char temp = 'O';

    
//     for (int i = 0; i < 3; i++)
//     {
//         //判断行赢
//         if (chess[i][0] == chess[i][1] && chess[i][1] == chess[i][2] && chess[i][0] != 'O')
//         {
//             temp = chess[i][0];
//             break;
//         }

//     }

//     for (int i = 0; i < 3; i++)
//     {
//         //判断列赢
//         if (chess[0][i] == chess[1][i] && chess[1][i] == chess[2][i] && chess[0][i] != 'O')
//         {
//             temp = chess[0][i];
//             break;
//         }

//     }

//     //正对角线
//     if (chess[0][0] == chess[1][1] && chess[1][1] == chess[2][2] && chess[1][1] != 'O')
//     {
//         temp = chess[1][1];
//     }

//     //反对角线
//     if (chess[0][2] == chess[1][1] && chess[1][1] == chess[2][0] && chess[1][1] != 'O')
//     {
//         temp = chess[1][1];
//     }


//     for (int i = 0; i < 3; i++)
//     {
//         for (int j = 0; j < 3; j++)
//         {
//             printf("%c ", chess[i][j]);
//         }
//         printf("\n");
//     }


//     if (temp == 'A')
//     {
//         printf("A win");
//     }
//     else if (temp == 'B')
//     {
//         printf("B win");
//     }
//     else
//     {
//         printf("NO win");
//     }
    
//     return 0;
// }






/*-------------------------------------------------------------------------------------------*/
//排序

// #include <stdio.h>

// int main ()
// {
//     //当数组中的元素都 < n 时 可以用这个方法
//     int n = 0;
//     scanf("%d", &n);

//     int arr[51] = {0};
//     int k = 0;

//     for (int i = 0; i < n; i++)
//     {
//         //接受的是几 就把其放入对应数组位置
//         scanf("%d", &k);
//         arr[k] = k;
//     }

//     for (int i = 0; i < n; i++)
//     {
//         if (arr[i] != 0)
//         {
//             printf("%d ", arr[i]);
//         }
//     }
//     return 0;
// }






/*-------------------------------------------------------------------------------------------*/
//去重 + 排序

#include <stdio.h>

int main ()
{
    int n = 0;
    scanf("%d", &n);

    int arr[1001] = {0};

    //接收数组
    int i = 0;
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }

    //排序 (冒泡排序)
    for (i = 0; i < n; i++)
    {
        int j = 0;
        for (j = 0; j < n - 1 - i; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                int t = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = t; 
            }
        }
    }

    //去重
    for (i = 0; i < n - 1; i++)
    {
        if (arr[i] == arr[i + 1])
        {
            int j = 0;
            //如果发现相同 将后续元素前移一格
            for (j = i; j < n - 1; j++)
            {
                arr[j] = arr[j + 1];
            }
            //防止连续三个重复情况
            i--;
            //运行一次总数 n 就少 1;
            n--;       
        }
    }

    //打印
    for (i = 0; i < n; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}